home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / mint / lib / mntlib44.zoo / mntlib / rename.c < prev    next >
C/C++ Source or Header  |  1993-10-27  |  957b  |  51 lines

  1. /* a public domain rename, by ERS */
  2.  
  3. #include <limits.h>
  4. #include <errno.h>
  5. #include <osbind.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <stat.h>
  9. #include <mintbind.h>
  10. #include "lib.h"
  11.  
  12. extern int __mint;
  13.  
  14. int rename(_oldname, _newname)
  15.     const char *_oldname, *_newname;
  16. {
  17.     char oldname[PATH_MAX], newname[PATH_MAX];
  18.     int rval;
  19.     struct stat oldstat;
  20.     struct stat newstat;
  21.  
  22.     _unx2dos(_oldname, oldname);
  23.     _unx2dos(_newname, newname);
  24.  
  25.     if (__mint
  26.         && (Fxattr(1, newname, &newstat) == 0)
  27.         && (Fxattr(1, oldname, &oldstat) == 0)
  28.         && (newstat.st_dev == oldstat.st_dev)
  29.         && (newstat.st_ino == oldstat.st_ino))
  30.     {
  31.         /* rename("foo", "./foo"); */
  32.         errno = EEXIST;
  33.         return -1;
  34.     }
  35.  
  36.     rval = Frename(0, oldname, newname);
  37.     if (rval == 0)
  38.       return 0;
  39.     if (rval != -EXDEV && rval != -ENOENT)
  40.       {
  41.         (void) Fdelete (newname);
  42.         rval = Frename(0, oldname, newname);
  43.       }
  44.  
  45.     if (rval < 0) {
  46.         errno = -rval;
  47.         rval = -1;
  48.     }
  49.     return rval;
  50. }
  51.